package com.software.sqlite.utils;

import cn.hutool.cache.CacheUtil;
import cn.hutool.cache.impl.TimedCache;

import java.util.Set;

public class HutoolCacheUtils {

    // 缓存 - 全局默认过期时间30分钟
    private static final TimedCache<String, Object> timedCache = CacheUtil.newTimedCache(1000 * 60 * 30);

    // 定时清理 - 每30分钟清理一次过期缓存（建议一定设置！）
    static {
        timedCache.schedulePrune(1000 * 60 * 30);
    }

    public static boolean containsKey(String key) {
        return timedCache.containsKey(key);
    }

    // 每次调用会重置过期时间。适用于频繁访问的缓存，不关心缓存时效性
    public static Object get(String key) {
        return timedCache.get(key);
    }

    /**
     * 获取缓存内容，可选择是否刷新过期时间
     * @param key key
     * @param isUpdateLastAccess 是否重置过期时间
     */
    @SuppressWarnings("unchecked") // Java 泛型擦除，需手动转换
    public static <T> T get(String key, boolean isUpdateLastAccess) {
        return (T) timedCache.get(key, isUpdateLastAccess);
    }

    public static void put(String key, Object value) {
        timedCache.put(key, value);
    }

    public static void put(String key, Object value, Integer timeout) {
        timedCache.put(key, value, timeout);
    }

    public static void remove(String key) {
        timedCache.remove(key);
    }

    public static void removeKeys(String keyword) {
        Set<String> keySet = timedCache.keySet();
        keySet.forEach(k -> {
            if (k.contains(keyword)) {
                timedCache.remove(k);
            }
        });
    }
}
